home *** CD-ROM | disk | FTP | other *** search
/ BCI NET / BCI NET Dec 94.iso / archives / programming / libraries / sslexamp2.lha / DVIType.asm < prev    next >
Encoding:
Assembly Source File  |  1994-07-01  |  4.3 KB  |  312 lines

  1. ; DVI Typer
  2. ; (c) 1993 MJSoft System Software, Martin Mares
  3.  
  4.     include    "ssmac.h"
  5.  
  6.     tbase    a4
  7.     start
  8.  
  9.     dv.w    postflag
  10.     dv.l    posn
  11.     dbuf    pfbuf,44
  12.  
  13.     get.l    from,a0
  14.     move.l    #1005,d0
  15.     call    TrackOpen
  16.     move.l    d0,d7        ; D7=fh
  17.     lea    getc(pc),a3
  18.  
  19. loop    call    ss,TestBreak
  20.     dtl    <%6ld >,a0
  21.     geta    posn,a1
  22.     call    Printf
  23.     bsr    getc
  24.     moveq    #0,d6
  25.     move.b    d0,d6        ; D6=current command
  26.     bpl.s    setchar
  27.     sub.b    #171,d0
  28.     bcs.s    command
  29.     sub.b    #64,d0
  30.     bcs.s    setfont
  31. command    ext.w    d0        ; D0=command#-43
  32.     add.w    d0,d0
  33.     lea    cmdtab+43*2(pc),a0
  34.     move.w    0(a0,d0.w),d0
  35.     move.w    d0,d2
  36.     and.w    #$FFF,d0
  37.     lea    0(a4,d0.w),a0
  38.     call    ss,Puts
  39.     rol.w    #5,d2
  40.     and.w    #$001E,d2
  41.     geta    pfbuf,a2
  42.     move.w    routs(pc,d2.w),d0
  43.     jsr    routs(pc,d0.w)
  44.     moveq    #10,d2
  45.     bsr    putc
  46.     bra.s    loop
  47.  
  48. rout    macro
  49.     dc.w    \1-routs
  50.     endm
  51.  
  52. routs    rout    nopar
  53.     rout    parn
  54.     rout    parn
  55.     rout    parn
  56.     rout    parn
  57.     rout    par44
  58.     rout    parbop
  59.     rout    parspec
  60.     rout    parfnt
  61.     rout    parpre
  62.     rout    parpost
  63.     rout    parppost
  64.     rout    parerr
  65.     rout    paruns
  66.     rout    paruns
  67.     rout    paruns
  68.  
  69. setfont    dtl    <Font    %d',10,'>,a2
  70.     add.b    #64,d0
  71.     bra.s    cmdd0
  72.  
  73. setchar    dtl    <Char    %d',10,'>,a2
  74. cmdd0    move.w    d0,-(sp)
  75.     move.l    sp,a1
  76.     move.l    a2,a0
  77.     call    ss,Printf
  78.     addq.l    #2,sp
  79.     bra    loop
  80.  
  81. ; 0=no,1=B,2=W,3=3B,4=L,5=L+L,6=BOP,7=Special,8=FntDef,9=Pre,10=Post,11=PPost
  82. ; 12=SNErr,13=unsigned B,14=unsigned W,15=unsigned 3B
  83.  
  84. cmd    macro    *name,params
  85.     ifne    NARG-1
  86.     dt    \@a,<\2>
  87.     elseif
  88.     dt.c    \@a,<>
  89.     endc
  90.     dc.w    \@a-TEXTBASE+(\1<<12)
  91.     endm
  92.  
  93. cmdtab    cmd    13
  94.     cmd    14
  95.     cmd    15
  96.     cmd    4,<Set>
  97.     cmd    5,<SetRule>
  98.     cmd    13
  99.     cmd    14
  100.     cmd    15
  101.     cmd    4,<Put>
  102.     cmd    5,<PutRule>
  103.     cmd    0,<Nop>
  104.     cmd    6,<Bop>
  105.     cmd    0,<Eop>
  106.     cmd    0,<Push>
  107.     cmd    0,<Pop>
  108.     cmd    1
  109.     cmd    2
  110.     cmd    3
  111.     cmd    4,<Right>
  112.     cmd    0,<W0>
  113.     cmd    1
  114.     cmd    2
  115.     cmd    3
  116.     cmd    4,<W>
  117.     cmd    0,<X0>
  118.     cmd    1
  119.     cmd    2
  120.     cmd    3
  121.     cmd    4,<X>
  122.     cmd    1
  123.     cmd    2
  124.     cmd    3
  125.     cmd    4,<Down>
  126.     cmd    0,<Y0>
  127.     cmd    1
  128.     cmd    2
  129.     cmd    3
  130.     cmd    4,<Y>
  131.     cmd    0,<Z0>
  132.     cmd    1
  133.     cmd    2
  134.     cmd    3
  135.     cmd    4,<Z>
  136.     cmd    13
  137.     cmd    14
  138.     cmd    15
  139.     cmd    4,<Fnt>
  140.     cmd    7
  141.     cmd    7
  142.     cmd    7
  143.     cmd    7,<Spec>
  144.     cmd    8
  145.     cmd    8
  146.     cmd    8
  147.     cmd    8,<FntDef>
  148.     cmd    9,<Pre>
  149.     cmd    10,<Post>
  150.     cmd    11,<PPost>
  151.     cmd    12
  152.     cmd    12
  153.     cmd    12
  154.     cmd    12
  155.     cmd    12
  156.     cmd    12,<???>
  157.  
  158. getc    addqv.l    #1,posn
  159.     move.l    d7,d1
  160.     call    dos,FGetC
  161.     tst.l    d0
  162.     bmi.s    errr
  163. ret    rts
  164.  
  165. errr    call    IoErr
  166.     move.l    (v),a6
  167.     tst.l    d0
  168.     bne.s    doserr
  169.     tstv.b    postflag
  170.     bne.s    exitcl
  171.     dtl    <Unexpected end of file>,a0
  172.     jump    ExitError
  173. exitcl    moveq    #10,d2
  174.     bsr    putc
  175.     jump    ss,ExitCleanup
  176. doserr    dtl    <Error reading %s>,a0
  177.     geta    from,a1
  178.     jump    DosError
  179.  
  180. parn    lsr.w    #1,d2
  181.     move.w    d2,d3
  182.     subq.w    #1,d3
  183.     moveq    #0,d4
  184.     jsr    (a3)
  185.     move.b    d0,d4
  186.     ext.w    d4
  187.     ext.l    d4
  188.     bra.s    1$
  189. 2$    jsr    (a3)
  190.     lsl.l    #8,d4
  191.     move.b    d0,d4
  192. 1$    dbf    d3,2$
  193. pftwox    dtl    <%ld    %ld>,a0
  194. pftwo    move.l    d2,(a2)+
  195.     move.l    d4,(a2)+
  196.     bra    printfb
  197.  
  198. paruns    lsr.w    #1,d2
  199.     sub.w    #12,d2
  200.     move.w    d2,d3
  201.     subq.w    #1,d3
  202.     bsr.s    getseq
  203.     bra.s    pftwox
  204.  
  205. parppost    bsr.s    getl
  206.     jsr    (a3)
  207.     subq.b    #2,d0
  208.     errc.eq    <Invalid postamble ID>
  209.     dtl    <    PostPtr=%ld>,a0
  210.     move.l    d4,(a2)+
  211.     bsr.s    printfb
  212.     stv    postflag
  213. ppp1    jsr    (a3)
  214.     cmp.b    #223,d0
  215.     beq.s    ppp1
  216.     err    <Garbage after PostPost>
  217.  
  218. par44    bsr.s    getl
  219.     move.l    d4,d2
  220.     bsr.s    getl
  221.     dtl    <    %ld,%ld>,a0
  222.     bra.s    pftwo
  223.  
  224. getl    moveq    #3,d3
  225. getseq    moveq    #0,d4
  226. .loop    jsr    (a3)
  227.     lsl.l    #8,d4
  228.     move.b    d0,d4
  229.     dbra    d3,.loop
  230.     rts
  231.  
  232. parspec    sub.b    #239,d6
  233.     bsr.s    putxx
  234.     moveq    #'"',d2
  235.     bsr.s    putc
  236.     tst.l    d4
  237.     beq.s    retq
  238. .doit    jsr    (a3)
  239.     move.l    d0,d2
  240.     bsr.s    putc
  241.     subq.l    #1,d4
  242.     bne.s    .doit
  243. retq    moveq    #'"',d2
  244. putc    get.l    stdout,d1
  245.     jump    dos,FPutC
  246.  
  247. putxx    move.l    d6,d2
  248.     add.b    #'1',d2
  249.     bsr.s    putc
  250.     moveq    #9,d2
  251.     bsr.s    putc
  252.     move.l    d6,d3
  253.     bra.s    getseq
  254.  
  255. parbop    moveq    #10,d2
  256.     bsr.s    get31
  257.     dtl    <    %ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,BackPtr=%ld>,a0
  258. printfb    geta    pfbuf,a1
  259.     jump    ss,Printf
  260.  
  261. get3    moveq    #2,d2
  262. get31    bsr.s    getl
  263.     move.l    d4,(a2)+
  264.     dbf    d2,get31
  265. nopar    rts
  266.  
  267. parfnt    sub.b    #243,d6
  268.     bsr.s    putxx
  269.     move.l    d4,(a2)+
  270.     bsr.s    get3
  271.     jsr    (a3)
  272.     move.l    d0,(a2)+
  273.     dtl    <%ld,Sum=%08lx,Scale=%ld,DesignSize=%ld,Area=%ld,">,a0
  274. parnamepf    bsr.s    printfb
  275. parname    jsr    (a3)
  276.     move.l    d0,d3
  277.     bra.s    parfnt2
  278. parfnt1    jsr    (a3)
  279.     move.l    d0,d2
  280.     bsr.s    putc
  281. parfnt2    dbf    d3,parfnt1
  282.     bra.s    retq
  283.  
  284. parpre    jsr    (a3)
  285.     subq.b    #2,d0
  286.     errc.eq    <Invalid DVI type !>
  287.     bsr.s    get3
  288.     dtl    <    Num=%ld,Den=%ld,Mag=%ld,">,a0
  289.     bra.s    parnamepf
  290.  
  291. parpost    moveq    #5,d2
  292.     bsr.s    get31
  293.     moveq    #1,d2
  294. .xxx    moveq    #1,d3
  295.     bsr    getseq
  296.     move.l    d0,(a2)+
  297.     dbf    d2,.xxx
  298.     dtl    <    FinalBOP=%ld,Num=%ld,Den=%ld,Mag=%ld,L=%ld,U=%ld,Stack=%ld,Pages=%ld>,a0
  299.     bra.s    printfb
  300.  
  301. parerr    err    <DVI file corrupted>
  302.  
  303.     tags
  304.     template <FROM/A>
  305.     dv.l    from
  306.     extrahelp
  307.     dc.b    'This is DVIType 1.0   (c) 1993 Martin Mares, MJSoft System Software',10,10
  308.     dc.b    'Usage: DVIType <DVI file>',10
  309.     endhelp
  310.     finish
  311.     end
  312.